package co.kr.bettersoft.carrotmerchantmobile.activity;
/**
 * MainSettings
 * 메인4. 세팅 액티비티.
 *  자동로그인 설정
 *  자주묻는질문, 약관 웹뷰
 *  이앱은?
 */

import co.kr.bettersoft.carrotmerchantmobile.common.CommonConstant;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.widget.Toast;

public class MainSettings extends PreferenceActivity implements OnSharedPreferenceChangeListener{
	int app_end = 0;	// 뒤로가기 버튼으로 닫을때 2번만에 닫히도록

	String TAG = "MainSettings";

	SharedPreferences sharedPrefCustom;	// 공용 프립스	

	static String merchantId;
	static String countryCode;
	static String languageCode;

	int sharePrefsFlag = 1;					// 어플내 자체 프립스를 얻기 위한 미끼. 1,-1 값을 바꿔가며 저장하면 리스너가 동작한다. - 그때 동작하는 프리퍼런스를 잡는다.

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		addPreferencesFromResource(R.xml.settings);
		sharedPrefCustom = getSharedPreferences("MyCustomePref",
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
		sharedPrefCustom.registerOnSharedPreferenceChangeListener(this);	
		
		SharedPreferences.Editor init2 = sharedPrefCustom.edit();		// 강제 호출용도  .. 단어명은 의미없지만 리스너에서 꺼낼때와 일치해야함..
		int someNum = sharedPrefCustom.getInt("sharePrefsFlag", sharePrefsFlag);	// 이전 값과 같을수 있으므로..
		someNum = someNum * -1;													// 매번 다른 값이 들어가야 제대로 호출이 된다. 같은 값들어가면 변화 없다고 호출 안됨.			
		init2.putInt("sharePrefsFlag", someNum); 		// 프리퍼런스 값 넣어 업데이트 시키면 강제로 리스너 호출.
		init2.commit();			
		// 자체 프리퍼를 지목할 수 있게 됨. 프리퍼런스 동기화를 위함.
	}

	/**
	 * onResume
	 *  액티비티 리쥼시 프리퍼런스 리스너를 등록한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onResume(){	
		super.onResume();
		merchantId = MainTabs.merchantId;
		countryCode = MainTabs.countryCode;
		languageCode = MainTabs.languageCode;
		app_end = 0;				// 뒤로가기 두번만에 닫히도록 초기화.
		// Set up a listener whenever a key changes 
		getPreferenceScreen().getSharedPreferences() 			// 리스너 on
		.registerOnSharedPreferenceChangeListener(this); 

	}
	/**
	 * onResume
	 *  액티비티 Pause시 프리퍼런스 리스너를 해제한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override 
	protected void onPause() { 
		super.onPause(); 
		// Unregister the listener whenever a key changes 
		getPreferenceScreen().getSharedPreferences() 			// 리스너 off
		.unregisterOnSharedPreferenceChangeListener(this); 
	} 

	// 프리퍼런스 리스너. (터치시 반응)
	/**
	 * onPreferenceTreeClick
	 *  프리퍼런스 리스너이다. (메뉴 선택시에 대한 동작 구현)
	 *
	 * @param preferenceScreen
	 * @param preference
	 * @return
	 */
	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		// 자주 묻는 질문 -> 인텐트로 웹뷰 실시
		if(preference.equals(findPreference("pref_app_qna"))){
			//			Toast.makeText(MainSettings.this, "웹뷰 페이지로 이동합니다.", Toast.LENGTH_SHORT).show();
			Intent webIntent = new Intent(MainSettings.this, myWebView.class);
			webIntent.putExtra("countryCode", countryCode);	// "http://www.mcarrot.net/mFaq.do"
			webIntent.putExtra("languageCode", languageCode);	// "http://www.mcarrot.net/mFaq.do"
			webIntent.putExtra("loadingURL", CommonConstant.settingsFaqUrl);	// "http://www.mcarrot.net/mFaq.do"
			//			webIntent.putExtra("loadingURL", "http://www.mcarrot.net/senchaIndex.do");			// sencha test page
			startActivity(webIntent);
		}
		// 이용 약관. -> 웹뷰로
		if(preference.equals(findPreference("pref_app_terms"))){
			//			Toast.makeText(PrefActivityFromResource.this, "웹뷰 페이지로 이동합니다.", Toast.LENGTH_SHORT).show();
			Intent webIntent = new Intent(MainSettings.this, myWebView.class);
			webIntent.putExtra("countryCode", countryCode);		// "http://www.mcarrot.net/mTerms.do"
			webIntent.putExtra("languageCode", languageCode);		// "http://www.mcarrot.net/mTerms.do"
			webIntent.putExtra("loadingURL", CommonConstant.settingsTermsUrl);		// "http://www.mcarrot.net/mTerms.do"
			startActivity(webIntent);
		}

		// 이 앱은 ? pref_app_what
		if(preference.equals(findPreference("pref_app_what"))){
			Intent aboutIntent = new Intent(MainSettings.this, WhatIsThisApp.class);
			//			webIntent.putExtra("loadingURL", "http://m.naver.com");
			startActivity(aboutIntent);
		}
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}	


	/*
	 *  닫기 버튼 2번 누르면 종료 됨.(non-Javadoc)
	 * @see android.app.Activity#onBackPressed()
	 */
	/**
	 * onBackPressed
	 *  닫기 버튼 2번 누르면 종료한다
	 *
	 * @param 
	 * @param 
	 * @return
	 */
	@Override
	public void onBackPressed() {
		Log.i("MainTabActivity", "finish");		
		if(app_end == 1){
			finish();
		}else{
			app_end = 1;
			Toast.makeText(MainSettings.this, R.string.noti_back_finish, Toast.LENGTH_SHORT).show();
			new Thread( 
					new Runnable(){
						public void run(){
							try {
								Thread.sleep(3000);
								app_end = 0;
							} catch (InterruptedException e) {e.printStackTrace();}
						}
					}
			).start();
		}
	}

	// 프리퍼런스 값 변경시 동작. 리스너. 
	/**
	 * onSharedPreferenceChanged
	 *  프리퍼런스 값 변경시 동작되는리스너이다.
	 *
	 * @param sharedPreferences
	 * @param key
	 * @return
	 */
	@Override
	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		if(key.equals("sharePrefsFlag")){		// oncreate 에서 넣은 것과 이름 일치해야 동작한다.   프리퍼런스 동기화 용도
			//			Log.d(TAG,"sync prefs");
			sharedPrefCustom = sharedPreferences;
		}
		// 자동 로그인 설정 변경시 로그인 용 설정에 저장.
		if(key.equals("preference_auto_login_chk")){		
			//			Log.d(TAG,"preference_auto_login_chk");
			// 자동 로그인 설정 변경시 공유 프리퍼런스에 저장한다. --> 나중에 어플 재기동시 꺼내어 바로 통과 시킬수 있다. 
			Boolean autoLoginYn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
			SharedPreferences.Editor autoLogin = sharedPrefCustom.edit();
			autoLogin.putBoolean("autoLogin", autoLoginYn);
			autoLogin.putString("merchantId", merchantId);
			autoLogin.putString("countryCode", countryCode);		
			autoLogin.putString("languageCode", languageCode);
			autoLogin.commit();
			MainTabs.autoLogin = autoLoginYn;
			Log.d(TAG,"merchantId:"+merchantId+"/countryCode:"+countryCode+"/languageCode:"+languageCode+"/autoLogin:"+autoLogin);
			Log.d(TAG,"auto login setting changed.."+autoLoginYn);
		}
	}	
}
